Skip to content

Pull in upstream#1

Open
friedkiwi wants to merge 450 commits intocyberdotgent:masterfrom
graphhopper:master
Open

Pull in upstream#1
friedkiwi wants to merge 450 commits intocyberdotgent:masterfrom
graphhopper:master

Conversation

@friedkiwi
Copy link
Copy Markdown

Please read our contributing guide and note that also your contribution falls under the Apache License 2.0 as outlined there.

Your first contribution should include a change where you add yourself to the CONTRIBUTORS.md file.

OlafFlebbeBosch and others added 30 commits January 21, 2025 17:45
* Low priority private access

* Low priority delivery/destination access

* Check weight limit
* In JTSTriangulator, use DelaunayTriangulationBuilder instead of Confo…
* Simplify property saving

* Allow to store multiple segments

* Allow to load multiple segments

* Add test case for high amount of props

* Use try-with-resources

* bytePos iter

* Check capacity
…dge-based CH alternatives (#3139)

* test

* fix

* remove test generator
karussell and others added 30 commits February 28, 2026 22:04
* do not apply smoothness if penalty was already done via surface

* or pick the smallest of surface vs smoothness?

* review comments
* cycleway encoded value

* docs
* implement simple heuristic to automatically force curbside 'right' for bigger roads to avoid crossing the road

* move one method up

* comment

* remove MOTORWAY; is not used for curbside and might be confusing
Add the ability for map matching to U-turn at directed candidate pairs
(same snap point, opposite directions) with a configurable cost penalty,
instead of only at intersections. This produces shorter, more accurate
matched routes when the GPS trace reverses direction near a candidate.

Also add comprehensive debug output (MatchDebugInfo) and a standalone
HTML visualizer that shows candidates, transitions, U-turns, and the
matched route on a Leaflet map. Remove normalization constants from
log-probability distributions for cleaner debug values.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move the debug visualizer template HTML from test resources and
web-bundle into map-matching/tools/, alongside a new Python CLI tool
(mapmatch.py) that posts GPX files to the map-matching API and
visualizes results in the browser. The CLI supports chunking large
files, selecting point ranges, and --debug mode which uses the
template to render the full debug visualization.

Remove the duplicate debug.html from web-bundle (was a jQuery-based
variant of the same visualizer) and simplify the test to only assert
on debug info correctness without generating HTML files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Rename file after successful download

* Use a fixed user agent
…hortcut weights (#3297)

* Scale up weights by x10 + round

* Fix most tests that simply need to expect x10 weights now.

* All algos need to use query graph weighting to route on query graph

* We have to use x10 whenever we use setMaximumLMWeight

* Adjust heuristic in alternative path algos (weights are up x10 -> scale factor down x10)

* Scale down CH shortcut weights

* Remove weight tolerance and lower time tolerance

* use random chains for strict checks with edge-based routing and finite u-turn costs

* Implement weight and time adjustment for virtual edges

* green

* misc

* make corrections smaller

* issue number

* comment

* reject NaN weights and infinite shortcuts

* remove low weight shortcut

* increase shortcut version

* what if we did not adjust weights?

* Revert "what if we did not adjust weights?"

This reverts commit 1701eb6.

* Speed up Weighting#roundWeight
Verifies that QueryGraphWeighting forbids u-turns at inner virtual
nodes (snap points along an edge) while allowing straight-through
traversal at zero cost.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-turn costs

WeightDetails.isEdgeDifferentToLastEdge() was setting edgeId to the
current edge *before* passing it to calcWeightWithTurnWeight as the
"previous edge" parameter. This caused every weight detail segment to
include a u-turn penalty (current edge -> same edge), inflating
per-segment weights by the u-turn cost (e.g. ~1800s).

Fix follows the same pattern as TimeDetails: pass the previous edge ID
first, then update it to the current edge.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The turn cost for transitioning from edge A to edge B is included in
edge B's weight detail segment. The first segment never includes a turn
cost (no previous edge). This matches the behavior of TimeDetails.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.